const https = require('https');
const SQLHelper = require('./SQLHelper')
const { formatTime } = require('./util')
///雪花算法生成id
const snowflake = require('./snowflake')

const multer = require('multer')
const storage = multer.diskStorage({
  destination: './uploads',
  filename: function (req,file,cb){
    //获取图片类型
    let fileType = file.originalname.split('.')
    fileType = fileType[fileType.length - 1]
    cb(null,snowflake() + '.' + fileType)
  }
})
const upload = multer({ storage: storage})

module.exports =function(app){
///登录拦截中间件
function loginRouter(req,res,next){
    if(req.method.toUpperCase() == 'OPTIONS'){
      next()
      return;
    }
    let token = req.headers.token
    if(token){
        SQLHelper(`select * from session where id = ${token} and state = 1`).then(ret => {
            if(ret.length){
                let session = ret[0]
                ///限制登录时间为两个小时
                if(new Date().getTime() - session.createTime < 2 * 60 * 60 *1000){                
                      req.session = {
                        userId:session.userId,
                        userName:session.userName
                    }
                    next()
                }else{
                  res.status(400).send({errorMsg:'登录已超时'})
                }  
            }else{
                res.status(406).send({errorMsg:'当前用户未登录'})
            }
        })
    }else{
        res.status(405).send({errorMsg:'缺少token，请先进行登录'})
    }
}
///让初登陆以为的所有小程序接口都先验证登陆
app.use('/admin',loginRouter)

//文件上传
app.post('/upload',upload.single('file'),(req,res)=>{
  res.send(req.file)
})

///管理后台登录
app.post('/login', (req, res) => {
  let userName =req.body.userName
  let passWord =req.body.passWord
  if(userName && passWord){
     SQLHelper(`
      select * from user where userName = '${userName}'
     `).then(users => {
       if(users.length){///正常登入
          let user = users[0]
          if(passWord == user.passWord){
            
            let token = snowflake()
            ///缓存token到session表
            SQLHelper(`
            INSERT INTO session(id,userId,userName,inTime,createTime,platform) 
            VALUES(${token},'${user._id}','${user.userName}','${formatTime(new Date())}','${new Date().getTime()}','admin')
            `).then(ret => {
                res.send({
                    nickName:user.nickName,
                    token,
                    avatarUrl:user.photo,
                    _id:user._id
                })
            })

          }else{
            res.send({errorMsg:'密码错误'})
          }
      }else{
        res.send({errorMsg:'当前用户不存在'})
      }
     })
  }else{
    res.send({errorMsg:'用户名或密码不能为空'})
  }
    
})
///退出登录
app.get('/admin/logout',(req,res) => {
  SQLHelper(`update session set outTime = '${formatTime(new Date())}',state = 0 where id ='${req.headers.token}'`).then(ret =>{
    res.send({msg:'退出登录成功'})
  })
})

//修改密码
app.post('/admin/changePassWord',(req,res) => {
  let userId =req.session.userId
  let passWord=req.body.passWord
  let newPass =req.body.newPass
  if(passWord && newPass){
    //查询用户
    SQLHelper(`select passWord from user where _id = '${userId}'`).then(users =>{
      let user =users[0]
      //比对用户密码
      if(user.passWord == passWord){
        SQLHelper(`update user set passWord ='${newPass}' where _id = '${userId}'`).then(ret =>{
          res.send({msg:'退出登录成功'})
        })
      }else{
        res.send({errorMsg:'原密码错误'})
      }
    })
  }else{
    res.send({errorMsg:'原密码和新密码不能为空'})
  }
})

// 分页获取首页轮播图列表
// pageSize 每页大小 默认10
// pageNum 当前页 默认1
app.get('/admin/index',(req,res) => {
  let pageSize = req.query.pageSize || 5
  let pageNum =req.query.pageNum || 1
  let offset = (pageNum - 1) * pageSize
  let title = req.query.title
  let whereSql = 'from index_region where state = 1'
  //按关键字搜索
  if(title) whereSql += ` and title like "%${title}%"`
  SQLHelper(`select count(*) as total ${whereSql};
             select * ${whereSql} limit ${pageSize} offset ${offset}`).then(ret => {
               res.send({
                 totale:ret[0][0].total,
                 rows:ret[1]
               })
             }) 
})



//新增信息
app.post('/admin/index', (req, res) => {
  let img = req.body.img,url = req.body.url,status = req.body.status
  let type = req.body.type || 'banner',title = req.body.title
  if(type != 'banner' && !title){
    res.send({errorMsg:'标题不能为空'})
    return
  }
  if(status != 0) status = 1 //默认启用
  if (img) {
    let createTime = new Date().getTime()
    SQLHelper(`
    INSERT INTO index_region(title,img,url,status,state,createTime,unitId,type)
    VALUES('${title}','${img}','${url}','${status}',1,'${createTime}','juzao','${type}')
    `).then(ret => {
      res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:'新闻数据失败'})
    })
  } else {
    res.send({ errorMsg: '传入参数错误' })
  }
})




///修改信息
app.put('/admin/index',(req,res) => {
  if(req.body.indexId){
    //需要修改的项
    let updateTime = new Date().getTime()
    let updateKey = ['img','url','title','status']
    let updateValues = [`updateTime=${updateTime}`]
    for(let i = 0;i < updateKey.length;i++){
        let key = updateKey[i],value = req.body[key]
        if(value !==undefined) updateValues.push(`${key}='${value}'`)///判断哪些需要修改
    }
    SQLHelper(`UPDATE index_region set ${updateValues.join(',')} WHERE _id = ${req.body.indexId}`).then(ret => {
         res.send(ret)
      })  
  }else{
    res.send({errorMsg:'传入参数错误'})
  }
})




//删除信息
//indexId 用户_id 必填
app.delete('/admin/index', (req, res) => {
  let indexId = req.query.indexId
  if (indexId) {
      SQLHelper(`
      UPDATE index_region
      set state = 0
      WHERE _id = ${indexId}
      `).then(ret => {
          res.send(ret)
        })
  } else {
    res.send({ errorMsg: '传入参数错误' })
  }
})
}
